
package com.github.wisdom.common.github.modules.util;

import java.util.LinkedHashMap;
import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.baomidou.mybatisplus.plugins.Page;

public class Query<T> extends LinkedHashMap<String, Object> {
	private static final long serialVersionUID = 1L;
	/**
	 * mybatis-plus分页参数
	 */
	private Page<T> page;
	/**
	 * 当前页码
	 */
	private int currPage = 1;
	/**
	 * 每页条数
	 */
	private int limit = 10;

	public Query(Map<String, Object> params) {
		this.putAll(params);

		// 分页参数
		if (params.get("page") != null && params.get("page").toString().trim() != "") {
			Object objectPage = params.get("page");
			if (objectPage instanceof Integer) {
				currPage = (Integer) objectPage;
			} else if (objectPage instanceof String) {
				currPage = Integer.parseInt(objectPage.toString());
			} else {
				currPage = 1;
			}
		}
		if (params.get("limit") != null && params.get("limit").toString().trim() != "") {
			Object objectLimit = params.get("limit");
			if (objectLimit instanceof Integer) {
				limit = (Integer) objectLimit;
			} else if (objectLimit instanceof String) {
				limit = Integer.parseInt(objectLimit.toString());
			} else {
				limit = 10;
			}
		}

		this.put("offset", (currPage - 1) * limit);
		this.put("page", currPage);
		this.put("limit", limit);

		// 防止SQL注入（因为sidx、order是通过拼接SQL实现排序的，会有SQL注入风险）
		String sidx = SQLFilter.sqlInject((String) params.get("sidx"));
		String order = SQLFilter.sqlInject((String) params.get("order"));
		this.put("sidx", sidx);
		this.put("order", order);

		// mybatis-plus分页
		this.page = new Page<>(currPage, limit);

		// 排序
		if (StringUtils.isNotBlank(sidx) && StringUtils.isNotBlank(order)) {
			this.page.setOrderByField(sidx);
			this.page.setAsc("ASC".equalsIgnoreCase(order));
		}

	}

	public Page<T> getPage() {
		return page;
	}

	public int getCurrPage() {
		return currPage;
	}

	public int getLimit() {
		return limit;
	}
}
